package com.yupi.project.mq;
 
import com.rabbitmq.client.*;
import java.io.IOException;
 
/**
 * @author:
 * @description: Producer 简单队列消费者
 */
public class Consumer {
    public static void main(String[] args) throws Exception {
        // 1: 创建连接工厂，设置连接属性
        ConnectionFactory connectionFactory = new ConnectionFactory();
        connectionFactory.setHost("123.58.209.178");
        connectionFactory.setPort(5672);
        connectionFactory.setVirtualHost("/");
        connectionFactory.setUsername("xp");
        connectionFactory.setPassword("123456");
 
        /*
         * 2: 从连接工厂中获取/创建连接（断点到此步可以发现web界面Connection下会出现此连接信息）
         * 3: 从连接中获取通道channel（断点到此步可以发现web界面Channel下会出现此连接信息）
         */
        try (Connection connection = connectionFactory.newConnection("消费者");
             Channel channel = connection.createChannel()){
 
            // 4: 通过创建交换机，声明队列，绑定关系，路由key,发送消息，和接收消息（声明队列可以在生产者或者消费者端）
            //channel.queueDeclare("queue1", false, false, false, null);
 
            // 接收消息，监听对应的队列名即可
            /*
             *  @params1： queue 队列的名称
             *  @params2： autoAck 指定是否自动ACK （true，接收到消息后，会立即告诉RabbitMQ）
             *  @params3： deliverCallback 指定消费回调,开启监听队列queue1
             *  @params4： cancelCallback 消费失败回调
             * */
            channel.basicConsume("simple-queue1", true, new DeliverCallback() {
                @Override
                public void handle(String consumerTag, Delivery delivery) throws IOException {
                    System.out.println("收到消息是" + new String(delivery.getBody(), "UTF-8"));
                }
            }, new CancelCallback() {
                @Override
                public void handle(String s)  {
                    System.out.println("接受失败了...");
                }
            });
 
            // 让程序停止，好接收消费
            System.out.println("开始接受消息");
            System.in.read();
        }
 
    }
}